import axios from 'axios';
import { UserState } from '@/store/modules/user/types';
import { Md5 } from 'ts-md5';
import {PageParams, PageRes} from "@/api/common";

const baseUrl = '/sc/gen/table/';
const apis = {
  queryPage: `${baseUrl}page`,
  detail: `${baseUrl}detail`,
  addForm: `${baseUrl}add`,
  editForm: `${baseUrl}edit`,
  deleteRow:`${baseUrl}delete`,
  dbTables:`${baseUrl}dbTables`,
  createCode: `${baseUrl}createCode`,
  dbTableColumns:`${baseUrl}dbTableColumns`,
  dbTableColumnConf:`${baseUrl}conf/fieldQuery`,
  upDbTableColumnConf:`${baseUrl}conf/upConf`,

};



export interface Table {
  id: string; // 对应 Java 中的 id
  tbTableName: string; // 对应 Java 中的 tbTableName
  tbTablePk: string; // 对应 Java 中的 tbTablePk
  pluginName: string; // 对应 Java 中的 pluginName
  moduleName: string; // 对应 Java 中的 moduleName
  tablePrefix: string; // 对应 Java 中的 tablePrefix
  generateType: string; // 对应 Java 中的 generateType
  module: string; // 对应 Java 中的 module
  menuPid: string; // 对应 Java 中的 menuPid
  functionName: string; // 对应 Java 中的 functionName
  busName: string; // 对应 Java 中的 busName
  className: string; // 对应 Java 中的 className
  formLayout: string; // 对应 Java 中的 formLayout
  gridWhether: string; // 对应 Java 中的 gridWhether
  packageName: string; // 对应 Java 中的 packageName
  author: string; // 对应 Java 中的 author
  sortCode: number; // 对应 Java 中的 sortCode
  dataSource:string;
}


export interface TbConf {
  /** 主键 */
  id: string;
  /** 基础ID */
  basicId: string;
  /** 是否主键 */
  isTableKey: string;
  /** 字段 */
  fieldName: string;
  /** 名称 */
  fieldRemark: string;
  /** 类型 */
  fieldType: string;
  /** 实体类型 */
  fieldJavaType: string;
  /** 作用类型 */
  effectType: string;
  /** 字典 */
  dictTypeCode: string;
  /** 列表显示 */
  whetherTable: string;
  /** 列省略 */
  whetherRetract: string;
  /** 是否增改 */
  whetherAddUpdate: string;
  /** 必填 */
  whetherRequired: string;
  /** 查询 */
  queryWhether: string;
  /** 查询方式 */
  queryType: string;
  /** 排序 */
  sortCode: number;
}


export interface Tables {
  tableComment: string;
  tableName: string;
}

export interface Columns {
  columnComment: string;
  columnName: string;
}



export function queryPage(params: PageParams) {
  return axios.post<PageRes>(apis.queryPage, params);
}


export function detail(rowId:string) {
  return axios.get<Table>(`${apis.detail}?id=${rowId}`);
}


export function dbTables(tableSchema:string) {
  return axios.get<Tables[]>(`${apis.dbTables}?tableSchema=${tableSchema}`);
}

export function dbTableColumns(tableSchema:string,tableName:string) {
  return axios.get<Columns[]>(`${apis.dbTableColumns}?tableSchema=${tableSchema}&tableName=${tableName}`);
}


export function addForm(param:any) {
  return axios.post<string>(apis.addForm,param);
}

export function editForm(param:any) {
  return  axios.post<string>(apis.editForm,param);
}

export function removeRow(rowId: string) {
  return axios.delete<string>(`${apis.deleteRow}?id=${rowId}`);
}

export function dbTableColumnConf(tableSchema:string,baseId:string) {
  return axios.get<TbConf[]>(`${apis.dbTableColumnConf}?tableSchema=${tableSchema}&baseId=${baseId}`);
}


export function upDbTableColumnConf(param:any) {
  return axios.post<string>(`${apis.upDbTableColumnConf}`,param);
}


export function createCode(rowId:string) {
  return axios.get<string>(`${apis.createCode}?id=${rowId}`);
}

